একটি To-Do List অ্যাপ একটি সাধারণ কিন্তু অত্যন্ত উপকারী অ্যাপ্লিকেশন, যা ব্যবহারকারীদের দৈনন্দিন কাজগুলো ট্র্যাক এবং ম্যানেজ করতে সহায়তা করে। এই অ্যাপে ব্যবহারকারীরা নতুন টাস্ক তৈরি করতে, টাস্ক সম্পন্ন করতে, এবং টাস্ক মুছে ফেলতে পারবেন।
To-Do List অ্যাপ ডেভেলপমেন্ট
আমরা Android Studio এবং Room Database ব্যবহার করে একটি To-Do List অ্যাপ তৈরি করার ধাপগুলো আলোচনা করব।
To-Do List অ্যাপের প্রধান ফিচার
- Task Creation এবং Deletion: নতুন টাস্ক তৈরি এবং টাস্ক মুছে ফেলার সুবিধা।
- Task Completion: প্রতিটি টাস্ক কমপ্লিট করার জন্য চেকবক্স বা সোয়াইপ অপশন।
- Task Persistence: টাস্কগুলো ডাটাবেসে সংরক্ষণ করা, যাতে অ্যাপ বন্ধ করলেও ডেটা সংরক্ষিত থাকে।
- Filter এবং Sort Options: টাস্কগুলোকে তারিখ বা স্ট্যাটাস অনুসারে ফিল্টার এবং সাজানোর সুবিধা।
অ্যাপ ডেভেলপমেন্টের ধাপ
ধাপ ১: Android Studio তে প্রজেক্ট তৈরি করা
- Android Studio তে New Project তৈরি করুন এবং Empty Activity নির্বাচন করুন।
- প্রজেক্টের নাম, প্যাকেজ, এবং মডিউল কনফিগার করুন এবং Finish ক্লিক করুন।
ধাপ ২: ডিপেন্ডেন্সি যোগ করা
build.gradle (Module level) ফাইলে নিচের ডিপেন্ডেন্সি যোগ করুন:
// Room Database
implementation 'androidx.room:room-runtime:2.4.2'
kapt 'androidx.room:room-compiler:2.4.2'
// ViewModel এবং LiveData
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.1'
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.4.1'
Room Database ব্যবহার করে ডাটাবেস ম্যানেজ করা হবে এবং ViewModel এবং LiveData ব্যবহার করে ডেটা ম্যানেজ করা হবে।
৩. টাস্ক মডেল এবং ডাটাবেস ডিজাইন
ধাপ ১: টাস্ক মডেল তৈরি করা
@Entity(tableName = "tasks")
data class Task(
@PrimaryKey(autoGenerate = true) val id: Int = 0,
val title: String,
val isCompleted: Boolean = false
)
ধাপ ২: DAO (Data Access Object) তৈরি করা
@Dao
interface TaskDao {
@Query("SELECT * FROM tasks ORDER BY id ASC")
fun getAllTasks(): LiveData<List<Task>>
@Insert
suspend fun insertTask(task: Task)
@Update
suspend fun updateTask(task: Task)
@Delete
suspend fun deleteTask(task: Task)
}
ধাপ ৩: Room Database সেটআপ করা
@Database(entities = [Task::class], version = 1)
abstract class TaskDatabase : RoomDatabase() {
abstract fun taskDao(): TaskDao
companion object {
@Volatile
private var INSTANCE: TaskDatabase? = null
fun getDatabase(context: Context): TaskDatabase {
return INSTANCE ?: synchronized(this) {
val instance = Room.databaseBuilder(
context.applicationContext,
TaskDatabase::class.java,
"task_database"
).build()
INSTANCE = instance
instance
}
}
}
}
৪. Task Creation এবং Deletion ইমপ্লিমেন্ট করা
ধাপ ১: UI সেটআপ করা
- activity_main.xml ফাইলে RecyclerView এবং FloatingActionButton যোগ করুন।
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/addTaskButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|bottom"
android:src="@drawable/ic_add"/>
ধাপ ২: Task Adapter তৈরি করা
TaskAdapter ক্লাস তৈরি করে টাস্কগুলো প্রদর্শন করুন:
class TaskAdapter(private val taskList: List<Task>, private val onTaskClick: (Task) -> Unit) : RecyclerView.Adapter<TaskAdapter.TaskViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TaskViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.task_item, parent, false)
return TaskViewHolder(view)
}
override fun onBindViewHolder(holder: TaskViewHolder, position: Int) {
val task = taskList[position]
holder.bind(task)
holder.itemView.setOnClickListener { onTaskClick(task) }
}
override fun getItemCount() = taskList.size
class TaskViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bind(task: Task) {
itemView.findViewById<TextView>(R.id.taskTitleTextView).text = task.title
itemView.findViewById<CheckBox>(R.id.taskCheckBox).isChecked = task.isCompleted
}
}
}
ধাপ ৩: Task Creation Activity তৈরি করা
TaskCreationActivity এ টাস্ক তৈরি করার জন্য UI এবং লজিক ইমপ্লিমেন্ট করুন:
class TaskCreationActivity : AppCompatActivity() {
private lateinit var taskDatabase: TaskDatabase
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_task_creation)
taskDatabase = TaskDatabase.getDatabase(this)
saveButton.setOnClickListener {
val title = taskTitleEditText.text.toString()
val task = Task(title = title)
CoroutineScope(Dispatchers.IO).launch {
taskDatabase.taskDao().insertTask(task)
finish()
}
}
}
}
৫. Task Display এবং Update ইমপ্লিমেন্ট করা
ধাপ ১: ViewModel তৈরি করা
class TaskViewModel(application: Application) : AndroidViewModel(application) {
private val taskDao = TaskDatabase.getDatabase(application).taskDao()
val allTasks: LiveData<List<Task>> = taskDao.getAllTasks()
fun insert(task: Task) = viewModelScope.launch(Dispatchers.IO) {
taskDao.insertTask(task)
}
fun delete(task: Task) = viewModelScope.launch(Dispatchers.IO) {
taskDao.deleteTask(task)
}
fun update(task: Task) = viewModelScope.launch(Dispatchers.IO) {
taskDao.updateTask(task)
}
}
ধাপ ২: MainActivity এ TaskViewModel এবং RecyclerView সেটআপ করা
class MainActivity : AppCompatActivity() {
private lateinit var taskViewModel: TaskViewModel
private lateinit var adapter: TaskAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
taskViewModel = ViewModelProvider(this).get(TaskViewModel::class.java)
adapter = TaskAdapter(emptyList()) { task ->
taskViewModel.update(task.copy(isCompleted = !task.isCompleted))
}
recyclerView.adapter = adapter
recyclerView.layoutManager = LinearLayoutManager(this)
taskViewModel.allTasks.observe(this, Observer { tasks ->
adapter = TaskAdapter(tasks) { task ->
taskViewModel.update(task.copy(isCompleted = !task.isCompleted))
}
recyclerView.adapter = adapter
})
addTaskButton.setOnClickListener {
val intent = Intent(this, TaskCreationActivity::class.java)
startActivity(intent)
}
}
}
Best Practices for To-Do List App Development
Data Persistence:
- Room Database ব্যবহার করে ডেটা সংরক্ষণ এবং লোড করুন।
UI Optimization:
- RecyclerView এবং View Binding ব্যবহার করে UI অপ্টিমাইজ করুন।
User Notifications:
- Task রিমাইন্ডার সেট করতে AlarmManager এবং WorkManager ব্যবহার করুন।
Testing and Debugging:
- Espresso এবং JUnit টেস্ট ফ্রেমওয়ার্ক ব্যবহার করে UI এবং লজিকাল টেস্টিং করুন।
উপসংহার
To-Do List অ্যাপ তৈরি করা একটি সহজ এবং কার্যকরী প্রজেক্ট, যা ডেভেলপারদের Android এবং Room Database সম্পর্কে ভালো ধারণা দিতে পারে। সঠিক টুলস এবং Best Practices অনুসরণ করলে ডেভেলপাররা একটি কার্যকরী এবং স্কেলেবল অ্যাপ তৈরি করতে পারেন, যা ব্যবহারকারীদের দৈনন্দিন কাজগুলো সহজে ম্যানেজ করতে সহায়ক।
Read more